﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Enidades;
using TrustX.Dados;
using System.Data.SqlClient;
using System.Data;
using TrustX.Security;

namespace Dados
{
    public class DBCliente
    {
        #region Carregar Dados do Usuário
        public Cliente carregarDadosCliente(int idCliente)
        {
            string SQL = @"SELECT ID_CLIENTE,
                                  NOME
                            FROM   TB_CLIENTE
                            WHERE ID_CLIENTE = @ID_CLIENTE";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_CLIENTE", SqlDbType.Int, idCliente);
            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();
                Cliente cli = new Cliente();
                if (dr.Read())
                {
                    cli.IdCliente = Convert.ToInt32(idCliente);
                    cli.Nome = dr["NOME"].ToString();
                }
                return cli;
            }
            catch
            {
                return null;
            }
        }
        #endregion
        
        #region inlcuir Cliente
        public bool incluirCliente(Cliente cli)
        {
            string sql = "";
            DataAccess db = new DataAccess(sql);
            SqlTransaction transacao;
            db.AbrirConexao();
            transacao = db.BeginTransaction();
            try
            {
                db.Command.Transaction = transacao;
                #region Inserir Cliente
                string SQL = @"INSERT INTO [dbo].[TB_CLIENTE]
                                   ([NOME]
                                   ,[FACE]
                                   ,[CPF]
                                   ,[GENERO]
                                   ,[EMAIL]
                                   ,[DATA_NASCIMENTO]
                                   ,[DATA_CADASTRO])
                             VALUES
                                   (@nome
                                   ,@face
                                   ,@cpf
                                   ,@genero
                                   ,@email
                                   ,@DATA_NASCIMENTO
                                   ,GETDATE()); SELECT SCOPE_IDENTITY()";

                db.Command.CommandText = SQL;
                db.AddParam("@NOME", SqlDbType.VarChar, cli.Nome);
                db.AddParam("@FACE", SqlDbType.VarChar, cli.Face);
                db.AddParam("@CPF", SqlDbType.VarChar, cli.Cpf);
                db.AddParam("@GENERO", SqlDbType.VarChar, cli.Sexo);
                db.AddParam("@EMAIL", SqlDbType.VarChar, cli.Email);
                db.AddParam("@DATA_NASCIMENTO", SqlDbType.VarChar, cli.DtNasc);
                #endregion

                #region Inserir Cliente_Endereço
                string SQL2 = @"INSERT INTO [dbo].[TB_ENDERECO]
                                   ([ID_CLIENTE],
                                    [LOGRADOURO],
                                    [NUMERO],
                                    [COMPLEMENTO],
                                    [CEP],
                                    [BAIRRO],
                                    [CIDADE],
                                    [ESTADO],
                                    [PONTO_REFERENCIA],
                                    [TIPO_ENDERECO],
                                    [DATA_CADASTRO])
                             VALUES
                                   (SCOPE_IDENTITY()
                                   ,@logradouro
                                   ,@numero
                                   ,@complemento
                                   ,@cep
                                   ,@bairro
                                   ,@cidade
                                   ,@estado
                                   ,@ponto_referencia
                                   ,@tipo_endereco
                                   ,GETDATE())";

                db.Command.CommandText = SQL2;
                db.AddParam("@LOGRADOURO", SqlDbType.VarChar, cli.Logradouro);
                db.AddParam("@NUMERO", SqlDbType.VarChar, cli.Numero);
                db.AddParam("@COMPLEMENTO", SqlDbType.VarChar, cli.Complemento);
                db.AddParam("@CEP", SqlDbType.VarChar, cli.Cep);
                db.AddParam("@BAIRRO", SqlDbType.VarChar, cli.Bairro);
                db.AddParam("@CIDADE", SqlDbType.VarChar, cli.Cidade);
                db.AddParam("@ESTADO", SqlDbType.VarChar, cli.Estado);
                db.AddParam("@PONTO_REFERENCIA", SqlDbType.VarChar, cli.PontoReferencia);
                db.AddParam("@TIPO_ENDERECO", SqlDbType.VarChar, cli.TipoEndereco);
                #endregion

                if (!db.Transacao())
                    throw new Exception();

                db.Command.Parameters.Clear();

                transacao.Commit();
                return true;
            }
            catch (System.Exception ex)
            {
                transacao.Rollback();
                throw new System.Exception(ex.Message.ToString());
            }
            finally
            {
                db.FecharConexao();
            }
        }
        #endregion

        #region Alterar Cliente
        public bool alterarCliente(Cliente cli)
        {
            string sql = "";
            DataAccess db = new DataAccess(sql);
            SqlTransaction transacao;
            db.AbrirConexao();
            transacao = db.BeginTransaction();
            try
            {
                db.Command.Transaction = transacao;
                #region Alterar Cliente
                string SQL = @"UPDATE TB_CLIENTE
                                   SET NOME = @NOME
                              WHERE ID_CLIENTE = @ID_CLIENTE";

                db.Command.CommandText = SQL;
                db.AddParam("@NOME", SqlDbType.VarChar, cli.Nome);
                #endregion

                if (!db.Transacao())
                    throw new Exception();

                db.Command.Parameters.Clear();

                transacao.Commit();
                return true;
            }
            catch (System.Exception ex)
            {
                transacao.Rollback();
                throw new System.Exception(ex.Message.ToString());
            }
            finally
            {
                db.FecharConexao();
            }
        }
        #endregion
    }
}
